package com.yz.crm.common.dao;

import java.util.List;
import java.util.Map;

/**
 * dao层接口定义
 * @author jiangxg
 *
 * @param <T> 泛型
 */
public interface CommonDao<T> {

	/**
	 * 保存对象
	 * @param obj
	 * @return
	 */
	public boolean save(T obj) throws Exception;
	
	/**
	 * 更新对象,根据主键更新
	 * @param Obj
	 * @return
	 */
	public boolean update(T obj) throws Exception;
	
	/**
	 * 根据主键查询对象
	 * @param clzz
	 * @param id
	 * @return
	 */
	public T load(Class<T> clzz,Object id);
	
	/**
	 * 统计符合查询条件的数据量
	 * @param sqlKey
	 * @param clzz
	 * @param param
	 * @return
	 */
	public Integer count(String sqlKey,Class<T> clzz,Object param);
	
	/**
	 * 根据指定的查询条件查询单个对象
	 * @param sqlKey
	 * @param clzz
	 * @param param
	 * @return
	 */
	public T queryForObject(String sqlKey,Class<T> clzz, Object param);
	
	/**
	 * 根据指定查询条件查询符合条件的所有内容列表
	 * @param sqlKey
	 * @param clzz
	 * @param param
	 * @return
	 */
	public List<T> queryForList(String sqlKey,Class<T> clzz, Map param);
	
	/**
	 * 根据指定查询条件查询符合条件的所有内容列表
	 * @param sqlKey
	 * @param clzz
	 * @param param
	 * @return
	 */
	public List<T> queryForList(String sqlKey,Class<T> clzz, Object obj);
	
	/**
	 * 逻辑删除单个对象
	 * @param id
	 * @return
	 */
	public boolean deleteLogic(T obj) throws Exception;
	
	/**
	 * 执行指定的sql更新表数据
	 * @param sqlKey
	 * @param clzz
	 * @param param
	 * @return
	 */
	public boolean updateBySql(String sqlKey, Class clzz, Object param) throws Exception;
	
	/**
	 * 执行指定的sql物理删除表数据
	 * @param sqlKey
	 * @param clzz
	 * @param param
	 * @return
	 */
	public boolean deleteBySql(String sqlKey, Class clzz, Object param) throws Exception;
	
	/**
	 * 执行指定的sql逻辑删除表数据
	 * @param sqlKey
	 * @param clzz
	 * @param param
	 * @return
	 */
	public boolean deleteLogicBySql(String sqlKey, Class clzz, Object param) throws Exception;
	
}
